﻿2026-08-08T22:31:33.1323315Z Current runner version: '2.336.0'
2026-08-08T22:31:33.1364112Z ##[group]Runner Image Provisioner
2026-08-08T22:31:33.1365530Z Hosted Compute Agent
2026-08-08T22:31:33.1366517Z Version: 20260707.563
2026-08-08T22:31:33.1367537Z Commit: 02667638d2b423fbc733a8e32a88b44996a3ba6e
2026-08-08T22:31:33.1369140Z Build Date: 2026-07-07T19:33:50Z
2026-08-08T22:31:33.1370245Z Worker ID: {bb3310d8-d189-4661-8601-fe74117673f9}
2026-08-08T22:31:33.1371468Z Azure Region: eastus
2026-08-08T22:31:33.1372573Z ##[endgroup]
2026-08-08T22:31:33.1374575Z ##[group]Operating System
2026-08-08T22:31:33.1375695Z Ubuntu
2026-08-08T22:31:33.1376586Z 24.04.4
2026-08-08T22:31:33.1377473Z LTS
2026-08-08T22:31:33.1378672Z ##[endgroup]
2026-08-08T22:31:33.1379574Z ##[group]Runner Image
2026-08-08T22:31:33.1380590Z Image: ubuntu-24.04
2026-08-08T22:31:33.1381654Z Version: 20260720.247.2
2026-08-08T22:31:33.1383710Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260720.247/images/ubuntu/Ubuntu2404-Readme.md
2026-08-08T22:31:33.1386502Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260720.247
2026-08-08T22:31:33.1388451Z ##[endgroup]
2026-08-08T22:31:33.1390438Z ##[group]GITHUB_TOKEN Permissions
2026-08-08T22:31:33.1393395Z Contents: read
2026-08-08T22:31:33.1394473Z Metadata: read
2026-08-08T22:31:33.1395422Z ##[endgroup]
2026-08-08T22:31:33.1398314Z Secret source: Actions
2026-08-08T22:31:33.1400559Z Prepare workflow directory
2026-08-08T22:31:33.1946291Z Prepare all required actions
2026-08-08T22:31:33.2012937Z Getting action download info
2026-08-08T22:31:33.3970530Z Download action repository 'actions/checkout@v4' (SHA:11d5960a326750d5838078e36cf38b85af677262)
2026-08-08T22:31:33.6440898Z Download action repository 'actions/setup-python@v5' (SHA:a26af69be951a213d495a4c3e4e4022e16d87065)
2026-08-08T22:31:33.8322329Z Complete job name: Migration, contracts, quality and repository safety
2026-08-08T22:31:33.9077933Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:31:33.9086954Z ##[group]Run actions/checkout@v4
2026-08-08T22:31:33.9087656Z with:
2026-08-08T22:31:33.9088499Z   fetch-depth: 0
2026-08-08T22:31:33.9089025Z   repository: Gamexgit/FinanceManager
2026-08-08T22:31:33.9093289Z   token: ***
2026-08-08T22:31:33.9093739Z   ssh-strict: true
2026-08-08T22:31:33.9094195Z   ssh-user: git
2026-08-08T22:31:33.9094657Z   persist-credentials: true
2026-08-08T22:31:33.9095154Z   clean: true
2026-08-08T22:31:33.9095610Z   sparse-checkout-cone-mode: true
2026-08-08T22:31:33.9096134Z   fetch-tags: false
2026-08-08T22:31:33.9096587Z   show-progress: true
2026-08-08T22:31:33.9097049Z   lfs: false
2026-08-08T22:31:33.9097525Z   submodules: false
2026-08-08T22:31:33.9098114Z   set-safe-directory: true
2026-08-08T22:31:33.9098637Z   allow-unsafe-pr-checkout: false
2026-08-08T22:31:33.9099430Z env:
2026-08-08T22:31:33.9099846Z   PYTHONPATH: src
2026-08-08T22:31:33.9100301Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:33.9101002Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:31:33.9101943Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:31:33.9102816Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:31:33.9103503Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:33.9104027Z ##[endgroup]
2026-08-08T22:31:34.0429454Z Syncing repository: Gamexgit/FinanceManager
2026-08-08T22:31:34.0433141Z ##[group]Getting Git version info
2026-08-08T22:31:34.0435171Z Working directory is '/home/runner/work/FinanceManager/FinanceManager'
2026-08-08T22:31:34.0437931Z [command]/usr/bin/git version
2026-08-08T22:31:34.0439368Z git version 2.54.0
2026-08-08T22:31:34.0444321Z ##[endgroup]
2026-08-08T22:31:34.0450982Z Temporarily overriding HOME='/home/runner/work/_temp/04fc6b3e-6ff5-48b4-af07-4e2edec3ed75' before making global git config changes
2026-08-08T22:31:34.0456123Z Adding repository directory to the temporary git global config as a safe directory
2026-08-08T22:31:34.0458442Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:31:34.0535530Z Deleting the contents of '/home/runner/work/FinanceManager/FinanceManager'
2026-08-08T22:31:34.0540800Z ##[group]Initializing the repository
2026-08-08T22:31:34.0542805Z [command]/usr/bin/git init /home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:31:34.0619499Z hint: Using 'master' as the name for the initial branch. This default branch name
2026-08-08T22:31:34.0630096Z hint: will change to "main" in Git 3.0. To configure the initial branch name
2026-08-08T22:31:34.0632640Z hint: to use in all of your new repositories, which will suppress this warning,
2026-08-08T22:31:34.0634322Z hint: call:
2026-08-08T22:31:34.0635658Z hint:
2026-08-08T22:31:34.0636818Z hint: 	git config --global init.defaultBranch <name>
2026-08-08T22:31:34.0638796Z hint:
2026-08-08T22:31:34.0640168Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2026-08-08T22:31:34.0642298Z hint: 'development'. The just-created branch can be renamed via this command:
2026-08-08T22:31:34.0643930Z hint:
2026-08-08T22:31:34.0645420Z hint: 	git branch -m <name>
2026-08-08T22:31:34.0646630Z hint:
2026-08-08T22:31:34.0648690Z hint: Disable this message with "git config set advice.defaultBranchName false"
2026-08-08T22:31:34.0651100Z Initialized empty Git repository in /home/runner/work/FinanceManager/FinanceManager/.git/
2026-08-08T22:31:34.0655563Z [command]/usr/bin/git remote add origin https://github.com/Gamexgit/FinanceManager
2026-08-08T22:31:34.0690416Z ##[endgroup]
2026-08-08T22:31:34.0692103Z ##[group]Disabling automatic garbage collection
2026-08-08T22:31:34.0710859Z [command]/usr/bin/git config --local gc.auto 0
2026-08-08T22:31:34.0751384Z ##[endgroup]
2026-08-08T22:31:34.0753265Z ##[group]Setting up auth
2026-08-08T22:31:34.0769153Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-08-08T22:31:34.0822756Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-08-08T22:31:34.1498597Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-08-08T22:31:34.1541640Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-08-08T22:31:34.2481582Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-08-08T22:31:34.2485123Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-08-08T22:31:34.2488948Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2026-08-08T22:31:34.2492483Z ##[endgroup]
2026-08-08T22:31:34.2493917Z ##[group]Fetching the repository
2026-08-08T22:31:34.2496835Z [command]/usr/bin/git -c protocol.version=2 fetch --prune --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/* +8d40641010c4904ad6b504ba2ee642c1db72edae:refs/remotes/pull/48/merge
2026-08-08T22:31:35.0485170Z From https://github.com/Gamexgit/FinanceManager
2026-08-08T22:31:35.0487514Z  * [new branch]      Sprint14/twr-xirr-performance-attribution -> origin/Sprint14/twr-xirr-performance-attribution
2026-08-08T22:31:35.0490778Z  * [new branch]      Sprint15/household-import-transfer-reconciliation-v1 -> origin/Sprint15/household-import-transfer-reconciliation-v1
2026-08-08T22:31:35.0493942Z  * [new branch]      Sprint16/hotfix-openpyxl-runtime-dependency -> origin/Sprint16/hotfix-openpyxl-runtime-dependency
2026-08-08T22:31:35.0497534Z  * [new branch]      Sprint16/smart-household-inbox-real-data-onboarding-v2 -> origin/Sprint16/smart-household-inbox-real-data-onboarding-v2
2026-08-08T22:31:35.0500948Z  * [new branch]      feat/budget-analytics-data-explorer-v1   -> origin/feat/budget-analytics-data-explorer-v1
2026-08-08T22:31:35.0503337Z  * [new branch]      feat/budget-categories-duplicates-cleanup -> origin/feat/budget-categories-duplicates-cleanup
2026-08-08T22:31:35.0506229Z  * [new branch]      feat/budget-categories-ux-fix            -> origin/feat/budget-categories-ux-fix
2026-08-08T22:31:35.0509139Z  * [new branch]      feat/budget-import-production-v2         -> origin/feat/budget-import-production-v2
2026-08-08T22:31:35.0511758Z  * [new branch]      feat/budget-monthly-import-rule-learning-v1 -> origin/feat/budget-monthly-import-rule-learning-v1
2026-08-08T22:31:35.0515313Z  * [new branch]      feat/budget-phase-1-4                    -> origin/feat/budget-phase-1-4
2026-08-08T22:31:35.0517472Z  * [new branch]      feat/budget-planning-forecast-v1         -> origin/feat/budget-planning-forecast-v1
2026-08-08T22:31:35.0520050Z  * [new branch]      feat/budget-planning-usability-v2        -> origin/feat/budget-planning-usability-v2
2026-08-08T22:31:35.0522628Z  * [new branch]      feat/budget-review-bulk-assign-confirm   -> origin/feat/budget-review-bulk-assign-confirm
2026-08-08T22:31:35.0524974Z  * [new branch]      feat/budget-workflow-help-ux             -> origin/feat/budget-workflow-help-ux
2026-08-08T22:31:35.0527415Z  * [new branch]      feat/finance-command-center-monthly-close-v1 -> origin/feat/finance-command-center-monthly-close-v1
2026-08-08T22:31:35.0530298Z  * [new branch]      feat/fixed-costs-subscriptions-v1        -> origin/feat/fixed-costs-subscriptions-v1
2026-08-08T22:31:35.0532617Z  * [new branch]      feat/grocery-matching-review-learning-v2 -> origin/feat/grocery-matching-review-learning-v2
2026-08-08T22:31:35.0535098Z  * [new branch]      feat/grocery-product-price-providers-v1  -> origin/feat/grocery-product-price-providers-v1
2026-08-08T22:31:35.0538675Z  * [new branch]      feat/migros-product-savings-grocery-optimizer-v1 -> origin/feat/migros-product-savings-grocery-optimizer-v1
2026-08-08T22:31:35.0542089Z  * [new branch]      feat/mobile-nav-income-csv-final         -> origin/feat/mobile-nav-income-csv-final
2026-08-08T22:31:35.0544882Z  * [new branch]      feat/mobile-nav-income-hotfix-v2         -> origin/feat/mobile-nav-income-hotfix-v2
2026-08-08T22:31:35.0560192Z  * [new branch]      feat/mobile-nav-income-planning-v1       -> origin/feat/mobile-nav-income-planning-v1
2026-08-08T22:31:35.0563472Z  * [new branch]      fix/manual-entry-uat-flows               -> origin/fix/manual-entry-uat-flows
2026-08-08T22:31:35.0566502Z  * [new branch]      fix/sprint16.2-insurance-family-order    -> origin/fix/sprint16.2-insurance-family-order
2026-08-08T22:31:35.0570108Z  * [new branch]      hotfix/sprint13-global-portfolio-aggregation -> origin/hotfix/sprint13-global-portfolio-aggregation
2026-08-08T22:31:35.0573332Z  * [new branch]      hotfix/sprint20-wealth-history-contract  -> origin/hotfix/sprint20-wealth-history-contract
2026-08-08T22:31:35.0576196Z  * [new branch]      hotfix/sprint8-kpi-overflow              -> origin/hotfix/sprint8-kpi-overflow
2026-08-08T22:31:35.0579143Z  * [new branch]      hotfix/sprint8-readonly-render           -> origin/hotfix/sprint8-readonly-render
2026-08-08T22:31:35.0582275Z  * [new branch]      integration/portfolio-phase3-to-main     -> origin/integration/portfolio-phase3-to-main
2026-08-08T22:31:35.0584871Z  * [new branch]      main                                     -> origin/main
2026-08-08T22:31:35.0587298Z  * [new branch]      sprint10/portfolio-go-live               -> origin/sprint10/portfolio-go-live
2026-08-08T22:31:35.0590380Z  * [new branch]      sprint11/portfolio-completeness-ux       -> origin/sprint11/portfolio-completeness-ux
2026-08-08T22:31:35.0593355Z  * [new branch]      sprint12/truewealth-verified-import      -> origin/sprint12/truewealth-verified-import
2026-08-08T22:31:35.0596557Z  * [new branch]      sprint13/postfinance-ledger-import       -> origin/sprint13/postfinance-ledger-import
2026-08-08T22:31:35.0600048Z  * [new branch]      sprint16.1/classification-coverage-import-readiness -> origin/sprint16.1/classification-coverage-import-readiness
2026-08-08T22:31:35.0603549Z  * [new branch]      sprint16.2/first-import-calibration-portal-flow -> origin/sprint16.2/first-import-calibration-portal-flow
2026-08-08T22:31:35.0607268Z  * [new branch]      sprint16.3/import-readiness-batched-decisions-performance -> origin/sprint16.3/import-readiness-batched-decisions-performance
2026-08-08T22:31:35.0610812Z  * [new branch]      sprint17a/data-truth                     -> origin/sprint17a/data-truth
2026-08-08T22:31:35.0613396Z  * [new branch]      sprint17b/equity-quote-refresh           -> origin/sprint17b/equity-quote-refresh
2026-08-08T22:31:35.0616065Z  * [new branch]      sprint17b/household-cockpit              -> origin/sprint17b/household-cockpit
2026-08-08T22:31:35.0619137Z  * [new branch]      sprint17c/data-truth-navigation-today-lite -> origin/sprint17c/data-truth-navigation-today-lite
2026-08-08T22:31:35.0622305Z  * [new branch]      sprint19/prior-year-actuals-simple-budget-v1 -> origin/sprint19/prior-year-actuals-simple-budget-v1
2026-08-08T22:31:35.0625228Z  * [new branch]      sprint2/navigation-design-shell          -> origin/sprint2/navigation-design-shell
2026-08-08T22:31:35.0628179Z  * [new branch]      sprint20/performance-data-readiness-v1   -> origin/sprint20/performance-data-readiness-v1
2026-08-08T22:31:35.0631511Z  * [new branch]      sprint20b/performance-activation-daily-valuations-v1 -> origin/sprint20b/performance-activation-daily-valuations-v1
2026-08-08T22:31:35.0635407Z  * [new branch]      sprint20e/market-data-recovery-crypto-activation-v1 -> origin/sprint20e/market-data-recovery-crypto-activation-v1
2026-08-08T22:31:35.0638928Z  * [new branch]      sprint20e/never-run-status-hotfix        -> origin/sprint20e/never-run-status-hotfix
2026-08-08T22:31:35.0641885Z  * [new branch]      sprint20e/provider-provenance-ui-hotfix  -> origin/sprint20e/provider-provenance-ui-hotfix
2026-08-08T22:31:35.0645129Z  * [new branch]      sprint20f/truewealth-instrument-model-activation -> origin/sprint20f/truewealth-instrument-model-activation
2026-08-08T22:31:35.0648645Z  * [new branch]      sprint3.1/reconciliation-semantic-hardening -> origin/sprint3.1/reconciliation-semantic-hardening
2026-08-08T22:31:35.0651741Z  * [new branch]      sprint3/reconciliation-snapshot-foundation -> origin/sprint3/reconciliation-snapshot-foundation
2026-08-08T22:31:35.0670007Z  * [new branch]      sprint4.1/portfolio-policy-contract-hardening -> origin/sprint4.1/portfolio-policy-contract-hardening
2026-08-08T22:31:35.0675612Z  * [new branch]      sprint4/portfolio-policy-foundation      -> origin/sprint4/portfolio-policy-foundation
2026-08-08T22:31:35.0679106Z  * [new branch]      sprint5/portfolio-performance-foundation -> origin/sprint5/portfolio-performance-foundation
2026-08-08T22:31:35.0682841Z  * [new branch]      sprint6/portfolio-data-ingestion-reconciliation -> origin/sprint6/portfolio-data-ingestion-reconciliation
2026-08-08T22:31:35.0685994Z  * [new branch]      sprint7/postfinance-portfolio-source     -> origin/sprint7/postfinance-portfolio-source
2026-08-08T22:31:35.0689005Z  * [new branch]      sprint8/market-fx-benchmark-risk         -> origin/sprint8/market-fx-benchmark-risk
2026-08-08T22:31:35.0691671Z  * [new branch]      sprint9/portfolio-basis-policy           -> origin/sprint9/portfolio-basis-policy
2026-08-08T22:31:35.0693935Z  * [new tag]         v0.3.0                                   -> v0.3.0
2026-08-08T22:31:35.0695842Z  * [new tag]         v0.3.1                                   -> v0.3.1
2026-08-08T22:31:35.0697699Z  * [new tag]         v0.3.2                                   -> v0.3.2
2026-08-08T22:31:35.0700035Z  * [new ref]         8d40641010c4904ad6b504ba2ee642c1db72edae -> pull/48/merge
2026-08-08T22:31:35.0705524Z ##[endgroup]
2026-08-08T22:31:35.0707503Z ##[group]Determining the checkout info
2026-08-08T22:31:35.0710272Z ##[endgroup]
2026-08-08T22:31:35.0712098Z [command]/usr/bin/git sparse-checkout disable
2026-08-08T22:31:35.0766053Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2026-08-08T22:31:35.0821818Z ##[group]Checking out the ref
2026-08-08T22:31:35.0828416Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/48/merge
2026-08-08T22:31:35.1396527Z Note: switching to 'refs/remotes/pull/48/merge'.
2026-08-08T22:31:35.1397847Z 
2026-08-08T22:31:35.1399075Z You are in 'detached HEAD' state. You can look around, make experimental
2026-08-08T22:31:35.1401202Z changes and commit them, and you can discard any commits you make in this
2026-08-08T22:31:35.1403330Z state without impacting any branches by switching back to a branch.
2026-08-08T22:31:35.1404627Z 
2026-08-08T22:31:35.1405522Z If you want to create a new branch to retain commits you create, you may
2026-08-08T22:31:35.1415766Z do so (now or later) by using -c with the switch command. Example:
2026-08-08T22:31:35.1416689Z 
2026-08-08T22:31:35.1426820Z   git switch -c <new-branch-name>
2026-08-08T22:31:35.1427650Z 
2026-08-08T22:31:35.1428581Z Or undo this operation with:
2026-08-08T22:31:35.1441443Z 
2026-08-08T22:31:35.1445270Z   git switch -
2026-08-08T22:31:35.1446159Z 
2026-08-08T22:31:35.1447181Z Turn off this advice by setting config variable advice.detachedHead to false
2026-08-08T22:31:35.1448857Z 
2026-08-08T22:31:35.1450067Z HEAD is now at 8d40641 Merge fcb64edb70d90082ead266d402c31eb20f77c2f2 into c3525a03dd78a91b34f4cf0ae973c24d0ee37180
2026-08-08T22:31:35.1454493Z ##[endgroup]
2026-08-08T22:31:35.1489577Z [command]/usr/bin/git log -1 --format=%H
2026-08-08T22:31:35.1501395Z 8d40641010c4904ad6b504ba2ee642c1db72edae
2026-08-08T22:31:35.1908587Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:31:35.1912049Z ##[group]Run actions/setup-python@v5
2026-08-08T22:31:35.1912939Z with:
2026-08-08T22:31:35.1913692Z   python-version: 3.11
2026-08-08T22:31:35.1914493Z   cache: pip
2026-08-08T22:31:35.1915302Z   cache-dependency-path: requirements-ci.txt
2026-08-08T22:31:35.1916239Z   check-latest: false
2026-08-08T22:31:35.1920943Z   token: ***
2026-08-08T22:31:35.1921718Z   update-environment: true
2026-08-08T22:31:35.1922546Z   allow-prereleases: false
2026-08-08T22:31:35.1923386Z   freethreaded: false
2026-08-08T22:31:35.1924156Z env:
2026-08-08T22:31:35.1924870Z   PYTHONPATH: src
2026-08-08T22:31:35.1925643Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:35.1926743Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:31:35.1928168Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:31:35.1929420Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:31:35.1930446Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:35.1931291Z ##[endgroup]
2026-08-08T22:31:35.3317356Z ##[group]Installed versions
2026-08-08T22:31:35.3402745Z (node:2033) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-08-08T22:31:35.3405421Z Successfully set up CPython (3.11.15)
2026-08-08T22:31:35.3407495Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-08-08T22:31:35.3410590Z ##[endgroup]
2026-08-08T22:31:35.4003702Z [command]/opt/hostedtoolcache/Python/3.11.15/x64/bin/pip cache dir
2026-08-08T22:31:35.8093329Z /home/runner/.cache/pip
2026-08-08T22:31:35.8873385Z pip cache is not found
2026-08-08T22:31:35.9049808Z ##[group]Run python -m pip install -e . -r requirements-ci.txt
2026-08-08T22:31:35.9051249Z [36;1mpython -m pip install -e . -r requirements-ci.txt[0m
2026-08-08T22:31:35.9109888Z shell: /usr/bin/bash -e {0}
2026-08-08T22:31:35.9110551Z env:
2026-08-08T22:31:35.9110993Z   PYTHONPATH: src
2026-08-08T22:31:35.9111533Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:35.9112678Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:31:35.9114499Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:31:35.9116110Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:31:35.9117275Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:35.9118625Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:35.9120054Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:31:35.9121521Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:35.9122803Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:35.9124064Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:35.9125352Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:31:35.9126370Z ##[endgroup]
2026-08-08T22:31:36.4949865Z Obtaining file:///home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:31:36.4958941Z   Installing build dependencies: started
2026-08-08T22:31:37.3256095Z   Installing build dependencies: finished with status 'done'
2026-08-08T22:31:37.3278913Z   Checking if build backend supports build_editable: started
2026-08-08T22:31:37.6909883Z   Checking if build backend supports build_editable: finished with status 'done'
2026-08-08T22:31:37.6911230Z   Getting requirements to build editable: started
2026-08-08T22:31:38.0063266Z   Getting requirements to build editable: finished with status 'done'
2026-08-08T22:31:38.0077602Z   Preparing editable metadata (pyproject.toml): started
2026-08-08T22:31:38.1889558Z   Preparing editable metadata (pyproject.toml): finished with status 'done'
2026-08-08T22:31:38.2934613Z Collecting fastapi==0.136.1 (from -r requirements-ci.txt (line 1))
2026-08-08T22:31:38.3417119Z   Downloading fastapi-0.136.1-py3-none-any.whl.metadata (28 kB)
2026-08-08T22:31:38.3647384Z Collecting httpx==0.28.1 (from -r requirements-ci.txt (line 2))
2026-08-08T22:31:38.3699767Z   Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
2026-08-08T22:31:38.3839212Z Collecting Jinja2==3.1.6 (from -r requirements-ci.txt (line 3))
2026-08-08T22:31:38.3878266Z   Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
2026-08-08T22:31:38.4043575Z Collecting openpyxl==3.1.5 (from -r requirements-ci.txt (line 4))
2026-08-08T22:31:38.4081258Z   Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:38.5017117Z Collecting pandas==3.0.3 (from -r requirements-ci.txt (line 5))
2026-08-08T22:31:38.5079015Z   Downloading pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB)
2026-08-08T22:31:38.5563255Z Collecting plotly==6.7.0 (from -r requirements-ci.txt (line 6))
2026-08-08T22:31:38.5611758Z   Downloading plotly-6.7.0-py3-none-any.whl.metadata (8.6 kB)
2026-08-08T22:31:38.6484446Z Collecting pydantic==2.13.4 (from -r requirements-ci.txt (line 7))
2026-08-08T22:31:38.6526490Z   Downloading pydantic-2.13.4-py3-none-any.whl.metadata (109 kB)
2026-08-08T22:31:38.6756144Z Collecting pypdf==6.14.2 (from -r requirements-ci.txt (line 8))
2026-08-08T22:31:38.6793853Z   Downloading pypdf-6.14.2-py3-none-any.whl.metadata (7.2 kB)
2026-08-08T22:31:38.7019151Z Collecting pytest==9.0.2 (from -r requirements-ci.txt (line 9))
2026-08-08T22:31:38.7075489Z   Downloading pytest-9.0.2-py3-none-any.whl.metadata (7.6 kB)
2026-08-08T22:31:38.9830566Z Collecting ruff==0.15.13 (from -r requirements-ci.txt (line 10))
2026-08-08T22:31:38.9884837Z   Downloading ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (26 kB)
2026-08-08T22:31:39.0183376Z Collecting streamlit==1.57.0 (from -r requirements-ci.txt (line 11))
2026-08-08T22:31:39.0267403Z   Downloading streamlit-1.57.0-py3-none-any.whl.metadata (9.6 kB)
2026-08-08T22:31:39.0535681Z Collecting uvicorn==0.47.0 (from -r requirements-ci.txt (line 12))
2026-08-08T22:31:39.0598970Z   Downloading uvicorn-0.47.0-py3-none-any.whl.metadata (6.7 kB)
2026-08-08T22:31:39.0706398Z Collecting xlrd==2.0.2 (from -r requirements-ci.txt (line 13))
2026-08-08T22:31:39.0742909Z   Downloading xlrd-2.0.2-py2.py3-none-any.whl.metadata (3.5 kB)
2026-08-08T22:31:39.0931492Z Collecting yfinance==1.3.0 (from -r requirements-ci.txt (line 14))
2026-08-08T22:31:39.0976649Z   Downloading yfinance-1.3.0-py2.py3-none-any.whl.metadata (6.1 kB)
2026-08-08T22:31:39.1179797Z Collecting starlette>=0.46.0 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.1218465Z   Downloading starlette-1.6.0-py3-none-any.whl.metadata (6.4 kB)
2026-08-08T22:31:39.1370897Z Collecting typing-extensions>=4.8.0 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.1423476Z   Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)
2026-08-08T22:31:39.1528916Z Collecting typing-inspection>=0.4.2 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.1561378Z   Downloading typing_inspection-0.4.2-py3-none-any.whl.metadata (2.6 kB)
2026-08-08T22:31:39.1646528Z Collecting annotated-doc>=0.0.2 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T22:31:39.1682130Z   Downloading annotated_doc-0.0.5-py3-none-any.whl.metadata (6.5 kB)
2026-08-08T22:31:39.1862430Z Collecting anyio (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.1898622Z   Downloading anyio-4.14.2-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T22:31:39.2054485Z Collecting certifi (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.2092920Z   Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:39.2226617Z Collecting httpcore==1.* (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.2273620Z   Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
2026-08-08T22:31:39.2406185Z Collecting idna (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T22:31:39.2443425Z   Downloading idna-3.18-py3-none-any.whl.metadata (6.1 kB)
2026-08-08T22:31:39.2844633Z Collecting MarkupSafe>=2.0 (from Jinja2==3.1.6->-r requirements-ci.txt (line 3))
2026-08-08T22:31:39.2883079Z   Downloading markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB)
2026-08-08T22:31:39.2979031Z Collecting et-xmlfile (from openpyxl==3.1.5->-r requirements-ci.txt (line 4))
2026-08-08T22:31:39.3019159Z   Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
2026-08-08T22:31:39.4759067Z Collecting numpy>=1.26.0 (from pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T22:31:39.4798480Z   Downloading numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (6.6 kB)
2026-08-08T22:31:39.4915704Z Collecting python-dateutil>=2.8.2 (from pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T22:31:39.4952755Z   Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
2026-08-08T22:31:39.5236443Z Collecting narwhals>=1.15.1 (from plotly==6.7.0->-r requirements-ci.txt (line 6))
2026-08-08T22:31:39.5273811Z   Downloading narwhals-2.24.0-py3-none-any.whl.metadata (15 kB)
2026-08-08T22:31:39.5436212Z Collecting packaging (from plotly==6.7.0->-r requirements-ci.txt (line 6))
2026-08-08T22:31:39.5479412Z   Downloading packaging-26.3-py3-none-any.whl.metadata (3.5 kB)
2026-08-08T22:31:39.5586234Z Collecting annotated-types>=0.6.0 (from pydantic==2.13.4->-r requirements-ci.txt (line 7))
2026-08-08T22:31:39.5628554Z   Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB)
2026-08-08T22:31:40.1065595Z Collecting pydantic-core==2.46.4 (from pydantic==2.13.4->-r requirements-ci.txt (line 7))
2026-08-08T22:31:40.1113105Z   Downloading pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
2026-08-08T22:31:40.1239341Z Collecting iniconfig>=1.0.1 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T22:31:40.1274876Z   Downloading iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:40.1387488Z Collecting pluggy<2,>=1.5 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T22:31:40.1427295Z   Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
2026-08-08T22:31:40.1849575Z Collecting pygments>=2.7.2 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T22:31:40.1884917Z   Downloading pygments-2.20.0-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T22:31:40.2049508Z Collecting altair!=5.4.0,!=5.4.1,<7,>=4.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.2075918Z   Downloading altair-6.2.2-py3-none-any.whl.metadata (11 kB)
2026-08-08T22:31:40.2207589Z Collecting blinker<2,>=1.5.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.2246674Z   Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)
2026-08-08T22:31:40.2395198Z Collecting cachetools<8,>=5.5 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.2431691Z   Downloading cachetools-7.1.7-py3-none-any.whl.metadata (5.5 kB)
2026-08-08T22:31:40.2579283Z Collecting click<9,>=7.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.2623471Z   Downloading click-8.4.2-py3-none-any.whl.metadata (2.6 kB)
2026-08-08T22:31:40.2806932Z Collecting gitpython!=3.1.19,<4,>=3.0.7 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.2849438Z   Downloading gitpython-3.1.58-py3-none-any.whl.metadata (13 kB)
2026-08-08T22:31:40.4209175Z Collecting pillow<13,>=7.1.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.4247937Z   Downloading pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.1 kB)
2026-08-08T22:31:40.4397243Z Collecting pydeck<1,>=0.8.0b4 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.4439540Z   Downloading pydeck-0.9.3-py2.py3-none-any.whl.metadata (4.2 kB)
2026-08-08T22:31:40.5585852Z Collecting protobuf<8,>=3.20 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.5624528Z   Downloading protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl.metadata (595 bytes)
2026-08-08T22:31:40.6607025Z Collecting pyarrow>=7.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.6653031Z   Downloading pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.0 kB)
2026-08-08T22:31:40.6833451Z Collecting requests<3,>=2.27 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.6869711Z   Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB)
2026-08-08T22:31:40.7004736Z Collecting tenacity<10,>=8.1.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.7042600Z   Downloading tenacity-9.1.4-py3-none-any.whl.metadata (1.2 kB)
2026-08-08T22:31:40.7152734Z Collecting toml<2,>=0.10.1 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.7190078Z   Downloading toml-0.10.2-py2.py3-none-any.whl.metadata (7.1 kB)
2026-08-08T22:31:40.7481870Z Collecting httptools>=0.6.3 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.7518687Z   Downloading httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (3.5 kB)
2026-08-08T22:31:40.7651649Z Collecting python-multipart>=0.0.10 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.7688896Z   Downloading python_multipart-0.0.32-py3-none-any.whl.metadata (2.1 kB)
2026-08-08T22:31:40.8488984Z Collecting websockets>=12.0.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.8533028Z   Downloading websockets-17.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (6.3 kB)
2026-08-08T22:31:40.8645398Z Collecting itsdangerous>=2.1.2 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.8689519Z   Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
2026-08-08T22:31:40.9024401Z Collecting watchdog<7,>=2.1.5 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:40.9079888Z   Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl.metadata (44 kB)
2026-08-08T22:31:40.9213848Z Collecting h11>=0.8 (from uvicorn==0.47.0->-r requirements-ci.txt (line 12))
2026-08-08T22:31:40.9252011Z   Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
2026-08-08T22:31:40.9406472Z Collecting multitasking>=0.0.7 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:40.9444510Z   Downloading multitasking-0.0.13-py3-none-any.whl.metadata (16 kB)
2026-08-08T22:31:40.9611705Z Collecting platformdirs>=2.0.0 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:40.9651678Z   Downloading platformdirs-4.11.1-py3-none-any.whl.metadata (5.5 kB)
2026-08-08T22:31:40.9942690Z Collecting pytz>=2022.5 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:40.9980745Z   Downloading pytz-2026.3.post1-py2.py3-none-any.whl.metadata (22 kB)
2026-08-08T22:31:41.0316362Z Collecting frozendict>=2.3.4 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.0357144Z   Downloading frozendict-2.4.7-py3-none-any.whl.metadata (23 kB)
2026-08-08T22:31:41.0536430Z Collecting peewee>=3.16.2 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.0575684Z   Downloading peewee-4.3.0-py3-none-any.whl.metadata (10 kB)
2026-08-08T22:31:41.0725554Z Collecting beautifulsoup4>=4.11.1 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.0766742Z   Downloading beautifulsoup4-4.15.0-py3-none-any.whl.metadata (3.8 kB)
2026-08-08T22:31:41.1265542Z Collecting curl_cffi>=0.15 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.1304526Z   Downloading curl_cffi-0.16.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (17 kB)
2026-08-08T22:31:41.1619338Z Collecting jsonschema>=3.0 (from altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.1656141Z   Downloading jsonschema-4.26.0-py3-none-any.whl.metadata (7.6 kB)
2026-08-08T22:31:41.1832811Z Collecting gitdb<5,>=4.0.1 (from gitpython!=3.1.19,<4,>=3.0.7->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.1876349Z   Downloading gitdb-4.0.12-py3-none-any.whl.metadata (1.2 kB)
2026-08-08T22:31:41.1985625Z Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.2023486Z   Downloading smmap-5.0.3-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T22:31:41.2888992Z Collecting charset_normalizer<4,>=2 (from requests<3,>=2.27->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.2929229Z   Downloading charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (41 kB)
2026-08-08T22:31:41.3518367Z Collecting urllib3<3,>=1.26 (from requests<3,>=2.27->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.3552217Z   Downloading urllib3-2.7.0-py3-none-any.whl.metadata (6.9 kB)
2026-08-08T22:31:41.3801178Z Collecting soupsieve>=1.6.1 (from beautifulsoup4>=4.11.1->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.3837737Z   Downloading soupsieve-2.9.2-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T22:31:41.4691146Z Collecting cffi>=2.0.0 (from curl_cffi>=0.15->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.4730522Z   Downloading cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.5 kB)
2026-08-08T22:31:41.4859018Z Collecting pycparser (from cffi>=2.0.0->curl_cffi>=0.15->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T22:31:41.4899342Z   Downloading pycparser-3.0-py3-none-any.whl.metadata (8.2 kB)
2026-08-08T22:31:41.5061107Z Collecting attrs>=22.2.0 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.5113019Z   Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB)
2026-08-08T22:31:41.5228987Z Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.5265876Z   Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl.metadata (2.9 kB)
2026-08-08T22:31:41.5449907Z Collecting referencing>=0.28.4 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.5485892Z   Downloading referencing-0.37.0-py3-none-any.whl.metadata (2.8 kB)
2026-08-08T22:31:41.7573500Z Collecting rpds-py>=0.25.0 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T22:31:41.7614057Z   Downloading rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)
2026-08-08T22:31:41.7801939Z Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T22:31:41.7837103Z   Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
2026-08-08T22:31:41.8004481Z Downloading fastapi-0.136.1-py3-none-any.whl (117 kB)
2026-08-08T22:31:41.8064819Z Downloading httpx-0.28.1-py3-none-any.whl (73 kB)
2026-08-08T22:31:41.8120956Z Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)
2026-08-08T22:31:41.8188399Z Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
2026-08-08T22:31:41.8265420Z Downloading pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.3 MB)
2026-08-08T22:31:41.9280599Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3/11.3 MB 114.2 MB/s  0:00:00
2026-08-08T22:31:41.9343826Z Downloading plotly-6.7.0-py3-none-any.whl (9.9 MB)
2026-08-08T22:31:41.9893719Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9/9.9 MB 183.7 MB/s  0:00:00
2026-08-08T22:31:41.9934238Z Downloading pydantic-2.13.4-py3-none-any.whl (472 kB)
2026-08-08T22:31:41.9999657Z Downloading pypdf-6.14.2-py3-none-any.whl (349 kB)
2026-08-08T22:31:42.0061009Z Downloading pytest-9.0.2-py3-none-any.whl (374 kB)
2026-08-08T22:31:42.0177426Z Downloading ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)
2026-08-08T22:31:42.0853873Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 171.7 MB/s  0:00:00
2026-08-08T22:31:42.0900859Z Downloading streamlit-1.57.0-py3-none-any.whl (9.2 MB)
2026-08-08T22:31:42.1406061Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2/9.2 MB 188.7 MB/s  0:00:00
2026-08-08T22:31:42.1444198Z Downloading uvicorn-0.47.0-py3-none-any.whl (71 kB)
2026-08-08T22:31:42.1498844Z Downloading xlrd-2.0.2-py2.py3-none-any.whl (96 kB)
2026-08-08T22:31:42.1561874Z Downloading yfinance-1.3.0-py2.py3-none-any.whl (133 kB)
2026-08-08T22:31:42.1631034Z Downloading pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
2026-08-08T22:31:42.1720567Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 260.3 MB/s  0:00:00
2026-08-08T22:31:42.1768988Z Downloading altair-6.2.2-py3-none-any.whl (797 kB)
2026-08-08T22:31:42.1818816Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 797.6/797.6 kB 181.1 MB/s  0:00:00
2026-08-08T22:31:42.1871985Z Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)
2026-08-08T22:31:42.1922564Z Downloading cachetools-7.1.7-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.1981806Z Downloading click-8.4.2-py3-none-any.whl (119 kB)
2026-08-08T22:31:42.2035462Z Downloading gitpython-3.1.58-py3-none-any.whl (220 kB)
2026-08-08T22:31:42.2094570Z Downloading gitdb-4.0.12-py3-none-any.whl (62 kB)
2026-08-08T22:31:42.2147263Z Downloading httpcore-1.0.9-py3-none-any.whl (78 kB)
2026-08-08T22:31:42.2217784Z Downloading numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.9 MB)
2026-08-08T22:31:42.2889635Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.9/16.9 MB 259.8 MB/s  0:00:00
2026-08-08T22:31:42.2926595Z Downloading pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.9 MB)
2026-08-08T22:31:42.3164724Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.9/6.9 MB 314.5 MB/s  0:00:00
2026-08-08T22:31:42.3207912Z Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
2026-08-08T22:31:42.3255054Z Downloading protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl (327 kB)
2026-08-08T22:31:42.3324028Z Downloading pydeck-0.9.3-py2.py3-none-any.whl (11.4 MB)
2026-08-08T22:31:42.3979101Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 185.9 MB/s  0:00:00
2026-08-08T22:31:42.4028890Z Downloading requests-2.34.2-py3-none-any.whl (73 kB)
2026-08-08T22:31:42.4087109Z Downloading charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (221 kB)
2026-08-08T22:31:42.4143241Z Downloading idna-3.18-py3-none-any.whl (65 kB)
2026-08-08T22:31:42.4195961Z Downloading smmap-5.0.3-py3-none-any.whl (24 kB)
2026-08-08T22:31:42.4247005Z Downloading tenacity-9.1.4-py3-none-any.whl (28 kB)
2026-08-08T22:31:42.4301883Z Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
2026-08-08T22:31:42.4354613Z Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB)
2026-08-08T22:31:42.4408159Z Downloading urllib3-2.7.0-py3-none-any.whl (131 kB)
2026-08-08T22:31:42.4465121Z Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl (79 kB)
2026-08-08T22:31:42.4520438Z Downloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)
2026-08-08T22:31:42.4572933Z Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB)
2026-08-08T22:31:42.4629487Z Downloading anyio-4.14.2-py3-none-any.whl (125 kB)
2026-08-08T22:31:42.4696015Z Downloading beautifulsoup4-4.15.0-py3-none-any.whl (109 kB)
2026-08-08T22:31:42.4748849Z Downloading certifi-2026.7.22-py3-none-any.whl (136 kB)
2026-08-08T22:31:42.4806639Z Downloading curl_cffi-0.16.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.5 MB)
2026-08-08T22:31:42.5217046Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.5/13.5 MB 344.0 MB/s  0:00:00
2026-08-08T22:31:42.5257183Z Downloading cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (217 kB)
2026-08-08T22:31:42.5314041Z Downloading frozendict-2.4.7-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.5368890Z Downloading h11-0.16.0-py3-none-any.whl (37 kB)
2026-08-08T22:31:42.5422776Z Downloading httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (464 kB)
2026-08-08T22:31:42.5483599Z Downloading iniconfig-2.3.0-py3-none-any.whl (7.5 kB)
2026-08-08T22:31:42.5535367Z Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.5609120Z Downloading jsonschema-4.26.0-py3-none-any.whl (90 kB)
2026-08-08T22:31:42.5664227Z Downloading attrs-26.1.0-py3-none-any.whl (67 kB)
2026-08-08T22:31:42.5720260Z Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB)
2026-08-08T22:31:42.5772054Z Downloading markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB)
2026-08-08T22:31:42.5825256Z Downloading multitasking-0.0.13-py3-none-any.whl (16 kB)
2026-08-08T22:31:42.5881022Z Downloading narwhals-2.24.0-py3-none-any.whl (461 kB)
2026-08-08T22:31:42.5964834Z Downloading packaging-26.3-py3-none-any.whl (129 kB)
2026-08-08T22:31:42.6023270Z Downloading peewee-4.3.0-py3-none-any.whl (179 kB)
2026-08-08T22:31:42.6086917Z Downloading platformdirs-4.11.1-py3-none-any.whl (23 kB)
2026-08-08T22:31:42.6145478Z Downloading pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (50.1 MB)
2026-08-08T22:31:42.7771423Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.1/50.1 MB 314.7 MB/s  0:00:00
2026-08-08T22:31:42.7825012Z Downloading pygments-2.20.0-py3-none-any.whl (1.2 MB)
2026-08-08T22:31:42.7900053Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 212.2 MB/s  0:00:00
2026-08-08T22:31:42.7938696Z Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
2026-08-08T22:31:42.7995295Z Downloading python_multipart-0.0.32-py3-none-any.whl (30 kB)
2026-08-08T22:31:42.8046604Z Downloading pytz-2026.3.post1-py2.py3-none-any.whl (508 kB)
2026-08-08T22:31:42.8112630Z Downloading referencing-0.37.0-py3-none-any.whl (26 kB)
2026-08-08T22:31:42.8172089Z Downloading rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (371 kB)
2026-08-08T22:31:42.8239105Z Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
2026-08-08T22:31:42.8286577Z Downloading soupsieve-2.9.2-py3-none-any.whl (37 kB)
2026-08-08T22:31:42.8344291Z Downloading starlette-1.6.0-py3-none-any.whl (75 kB)
2026-08-08T22:31:42.8401189Z Downloading typing_inspection-0.4.2-py3-none-any.whl (14 kB)
2026-08-08T22:31:42.8458754Z Downloading websockets-17.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (219 kB)
2026-08-08T22:31:42.8516013Z Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
2026-08-08T22:31:42.8595562Z Downloading pycparser-3.0-py3-none-any.whl (48 kB)
2026-08-08T22:31:43.0964254Z Building wheels for collected packages: jarvis-finance
2026-08-08T22:31:43.0973345Z   Building editable for jarvis-finance (pyproject.toml): started
2026-08-08T22:31:43.3060123Z   Building editable for jarvis-finance (pyproject.toml): finished with status 'done'
2026-08-08T22:31:43.3065530Z   Created wheel for jarvis-finance: filename=jarvis_finance-0.1.0-0.editable-py3-none-any.whl size=1510 sha256=a2664a704b3ecd87af688ad0c6cc6a7809ba20c8209ee6f62a21a5b3fbcf4906
2026-08-08T22:31:43.3067798Z   Stored in directory: /tmp/pip-ephem-wheel-cache-zautjf1r/wheels/ad/81/a6/5383a3c32505f4e59976cc011a336e07c6284dcaf35f5a7ea5
2026-08-08T22:31:43.3083347Z Successfully built jarvis-finance
2026-08-08T22:31:43.4310863Z Installing collected packages: pytz, multitasking, xlrd, websockets, watchdog, urllib3, typing-extensions, toml, tenacity, soupsieve, smmap, six, ruff, rpds-py, python-multipart, pypdf, pygments, pycparser, pyarrow, protobuf, pluggy, platformdirs, pillow, peewee, packaging, numpy, narwhals, MarkupSafe, itsdangerous, iniconfig, idna, httptools, h11, frozendict, et-xmlfile, click, charset_normalizer, certifi, cachetools, blinker, attrs, annotated-types, annotated-doc, uvicorn, typing-inspection, requests, referencing, python-dateutil, pytest, pydantic-core, plotly, openpyxl, Jinja2, httpcore, gitdb, cffi, beautifulsoup4, anyio, starlette, pydeck, pydantic, pandas, jsonschema-specifications, jarvis-finance, httpx, gitpython, curl_cffi, yfinance, jsonschema, fastapi, altair, streamlit
2026-08-08T22:31:58.7880709Z 
2026-08-08T22:31:58.7934463Z Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.3 altair-6.2.2 annotated-doc-0.0.5 annotated-types-0.8.0 anyio-4.14.2 attrs-26.1.0 beautifulsoup4-4.15.0 blinker-1.9.0 cachetools-7.1.7 certifi-2026.7.22 cffi-2.1.1 charset_normalizer-3.4.9 click-8.4.2 curl_cffi-0.16.0 et-xmlfile-2.0.0 fastapi-0.136.1 frozendict-2.4.7 gitdb-4.0.12 gitpython-3.1.58 h11-0.16.0 httpcore-1.0.9 httptools-0.8.0 httpx-0.28.1 idna-3.18 iniconfig-2.3.0 itsdangerous-2.2.0 jarvis-finance-0.1.0 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 multitasking-0.0.13 narwhals-2.24.0 numpy-2.4.6 openpyxl-3.1.5 packaging-26.3 pandas-3.0.3 peewee-4.3.0 pillow-12.3.0 platformdirs-4.11.1 plotly-6.7.0 pluggy-1.6.0 protobuf-7.35.1 pyarrow-25.0.0 pycparser-3.0 pydantic-2.13.4 pydantic-core-2.46.4 pydeck-0.9.3 pygments-2.20.0 pypdf-6.14.2 pytest-9.0.2 python-dateutil-2.9.0.post0 python-multipart-0.0.32 pytz-2026.3.post1 referencing-0.37.0 requests-2.34.2 rpds-py-2026.6.3 ruff-0.15.13 six-1.17.0 smmap-5.0.3 soupsieve-2.9.2 starlette-1.6.0 streamlit-1.57.0 tenacity-9.1.4 toml-0.10.2 typing-extensions-4.16.0 typing-inspection-0.4.2 urllib3-2.7.0 uvicorn-0.47.0 watchdog-6.0.0 websockets-17.0.1 xlrd-2.0.2 yfinance-1.3.0
2026-08-08T22:31:58.7949102Z 
2026-08-08T22:31:58.7978898Z [notice] A new release of pip is available: 26.1.2 -> 26.2.1
2026-08-08T22:31:58.7989209Z [notice] To update, run: pip install --upgrade pip
2026-08-08T22:31:59.0163940Z ##[group]Run git diff --check "origin/${GITHUB_BASE_REF:-main}...HEAD"
2026-08-08T22:31:59.0164452Z [36;1mgit diff --check "origin/${GITHUB_BASE_REF:-main}...HEAD"[0m
2026-08-08T22:31:59.0212699Z shell: /usr/bin/bash -e {0}
2026-08-08T22:31:59.0213154Z env:
2026-08-08T22:31:59.0213375Z   PYTHONPATH: src
2026-08-08T22:31:59.0213613Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:59.0213990Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:31:59.0214500Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:31:59.0214966Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:31:59.0215329Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:59.0215656Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0216077Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:31:59.0216531Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0216933Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0217317Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0217695Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:31:59.0218161Z ##[endgroup]
2026-08-08T22:31:59.0527008Z ##[group]Run python -m jarvis_finance.cli.main git-safety-scan .
2026-08-08T22:31:59.0527493Z [36;1mpython -m jarvis_finance.cli.main git-safety-scan .[0m
2026-08-08T22:31:59.0572410Z shell: /usr/bin/bash -e {0}
2026-08-08T22:31:59.0572671Z env:
2026-08-08T22:31:59.0572884Z   PYTHONPATH: src
2026-08-08T22:31:59.0573115Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:31:59.0573497Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:31:59.0574004Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:31:59.0574463Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:31:59.0574826Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:31:59.0575152Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0575568Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:31:59.0576038Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0576421Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0576801Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:31:59.0577179Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:31:59.0577550Z ##[endgroup]
2026-08-08T22:32:00.8602344Z GIT_SAFETY_OK
2026-08-08T22:32:00.8819256Z ##[group]Run python -m ruff check \
2026-08-08T22:32:00.8819822Z [36;1mpython -m ruff check \[0m
2026-08-08T22:32:00.8820308Z [36;1m  scripts/ci_portfolio_phase3_gate.py \[0m
2026-08-08T22:32:00.8820826Z [36;1m  src/jarvis_finance/api/main.py \[0m
2026-08-08T22:32:00.8821367Z [36;1m  src/jarvis_finance/api/routers/overview.py \[0m
2026-08-08T22:32:00.8821985Z [36;1m  src/jarvis_finance/api/schemas/portfolio_data.py \[0m
2026-08-08T22:32:00.8822674Z [36;1m  src/jarvis_finance/api/schemas/portfolio_performance.py \[0m
2026-08-08T22:32:00.8823365Z [36;1m  src/jarvis_finance/api/schemas/portfolio_policy.py \[0m
2026-08-08T22:32:00.8824092Z [36;1m  src/jarvis_finance/api/schemas/performance_activation.py \[0m
2026-08-08T22:32:00.8824765Z [36;1m  src/jarvis_finance/api/schemas/reconciliation.py \[0m
2026-08-08T22:32:00.8825330Z [36;1m  src/jarvis_finance/api/security.py \[0m
2026-08-08T22:32:00.8825818Z [36;1m  src/jarvis_finance/cli/main.py \[0m
2026-08-08T22:32:00.8826370Z [36;1m  src/jarvis_finance/config/settings.py \[0m
2026-08-08T22:32:00.8826906Z [36;1m  src/jarvis_finance/ledger/cost_basis.py \[0m
2026-08-08T22:32:00.8827455Z [36;1m  src/jarvis_finance/ledger/performance.py \[0m
2026-08-08T22:32:00.8828251Z [36;1m  src/jarvis_finance/market/providers.py \[0m
2026-08-08T22:32:00.8828796Z [36;1m  src/jarvis_finance/quality/freshness.py \[0m
2026-08-08T22:32:00.8829334Z [36;1m  src/jarvis_finance/quality/git_safety.py \[0m
2026-08-08T22:32:00.8829921Z [36;1m  src/jarvis_finance/services/crypto_market_recovery.py \[0m
2026-08-08T22:32:00.8831056Z [36;1m  src/jarvis_finance/services/performance_activation.py \[0m
2026-08-08T22:32:00.8831718Z [36;1m  src/jarvis_finance/services/portfolio_data.py \[0m
2026-08-08T22:32:00.8832371Z [36;1m  src/jarvis_finance/services/portfolio_performance.py \[0m
2026-08-08T22:32:00.8833039Z [36;1m  src/jarvis_finance/services/portfolio_policy.py \[0m
2026-08-08T22:32:00.8833725Z [36;1m  src/jarvis_finance/services/reconciliation_snapshot.py \[0m
2026-08-08T22:32:00.8834452Z [36;1m  src/jarvis_finance/services/truewealth_productization.py \[0m
2026-08-08T22:32:00.8835145Z [36;1m  src/jarvis_finance/services/truewealth_service.py \[0m
2026-08-08T22:32:00.8835809Z [36;1m  src/jarvis_finance/services/truewealth_valuation.py \[0m
2026-08-08T22:32:00.8836458Z [36;1m  src/jarvis_finance/services/transfer_pairing.py \[0m
2026-08-08T22:32:00.8837049Z [36;1m  src/jarvis_finance/storage/database.py \[0m
2026-08-08T22:32:00.8837615Z [36;1m  src/jarvis_finance/storage/migrations.py \[0m
2026-08-08T22:32:00.8838442Z [36;1m  tests/conftest.py \[0m
2026-08-08T22:32:00.8838933Z [36;1m  tests/unit/test_api_write_security.py \[0m
2026-08-08T22:32:00.8839458Z [36;1m  tests/unit/test_git_safety.py \[0m
2026-08-08T22:32:00.8840108Z [36;1m  tests/unit/test_portfolio_data_ingestion_reconciliation.py \[0m
2026-08-08T22:32:00.8840864Z [36;1m  tests/unit/test_portfolio_performance_foundation.py \[0m
2026-08-08T22:32:00.8841526Z [36;1m  tests/unit/test_portfolio_policy_foundation.py \[0m
2026-08-08T22:32:00.8842198Z [36;1m  tests/unit/test_reconciliation_snapshot_foundation.py \[0m
2026-08-08T22:32:00.8842797Z [36;1m  tests/unit/test_settings.py \[0m
2026-08-08T22:32:00.8843383Z [36;1m  tests/unit/test_sprint20d_truewealth_productization.py \[0m
2026-08-08T22:32:00.8844089Z [36;1m  tests/unit/test_sprint20d_truewealth_valuation.py \[0m
2026-08-08T22:32:00.8844779Z [36;1m  tests/unit/test_sprint20e_crypto_market_recovery.py \[0m
2026-08-08T22:32:00.8845298Z [36;1m  tests/unit/test_transfer_pairing_v2.py[0m
2026-08-08T22:32:00.8892649Z shell: /usr/bin/bash -e {0}
2026-08-08T22:32:00.8892923Z env:
2026-08-08T22:32:00.8893158Z   PYTHONPATH: src
2026-08-08T22:32:00.8893393Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:32:00.8893779Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:32:00.8894301Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:32:00.8895003Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:32:00.8895370Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:32:00.8895704Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.8896126Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:32:00.8896540Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.8896935Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.8897314Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.8897699Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:32:00.8898152Z ##[endgroup]
2026-08-08T22:32:00.9479248Z All checks passed!
2026-08-08T22:32:00.9510171Z ##[group]Run python -m compileall -q src tests scripts/ci_portfolio_phase3_gate.py
2026-08-08T22:32:00.9510767Z [36;1mpython -m compileall -q src tests scripts/ci_portfolio_phase3_gate.py[0m
2026-08-08T22:32:00.9557617Z shell: /usr/bin/bash -e {0}
2026-08-08T22:32:00.9557885Z env:
2026-08-08T22:32:00.9558301Z   PYTHONPATH: src
2026-08-08T22:32:00.9558539Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:32:00.9558918Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:32:00.9559437Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:32:00.9559896Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:32:00.9560249Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:32:00.9560579Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.9561203Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:32:00.9561670Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.9562059Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.9562439Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:00.9562815Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:32:00.9563147Z ##[endgroup]
2026-08-08T22:32:01.7133644Z ##[group]Run python scripts/ci_portfolio_phase3_gate.py
2026-08-08T22:32:01.7134078Z [36;1mpython scripts/ci_portfolio_phase3_gate.py[0m
2026-08-08T22:32:01.7181366Z shell: /usr/bin/bash -e {0}
2026-08-08T22:32:01.7181636Z env:
2026-08-08T22:32:01.7181848Z   PYTHONPATH: src
2026-08-08T22:32:01.7182077Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:32:01.7182457Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:32:01.7183004Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:32:01.7183468Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:32:01.7183824Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:32:01.7184164Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:01.7184587Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:32:01.7185010Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:01.7185486Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:01.7185861Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:01.7186238Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:32:01.7186569Z ##[endgroup]
2026-08-08T22:32:02.8208915Z sprint5_fixture_schema=40
2026-08-08T22:32:03.1349158Z phase3_migration_gate=PASS
2026-08-08T22:32:03.1349975Z empty_schema=49 integrity=ok ingestion_analysis_scope_rows=0 default_performance_included=0
2026-08-08T22:32:03.1351258Z sprint5_schema=40_to_49 integrity=ok business_digest=bb8a14c6af1f793c4d521db72516f441685ab52f30336d26afba8b2dcbb95a01 scope_normalized=true audit_bound=true second_run_noop=true
2026-08-08T22:32:03.1352226Z settings_guard=PASS production_paths_rejected=true
2026-08-08T22:32:03.1481856Z ##[group]Run mkdir -p /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:32:03.1482708Z [36;1mmkdir -p /tmp/financemanager-phase3-controls/runtime[0m
2026-08-08T22:32:03.1483281Z [36;1mpython -m pytest -q \[0m
2026-08-08T22:32:03.1483752Z [36;1m  tests/unit/test_api_write_security.py \[0m
2026-08-08T22:32:03.1484274Z [36;1m  tests/unit/test_settings.py \[0m
2026-08-08T22:32:03.1484859Z [36;1m  tests/unit/test_portfolio_data_ingestion_reconciliation.py \[0m
2026-08-08T22:32:03.1485584Z [36;1m  tests/unit/test_portfolio_performance_foundation.py \[0m
2026-08-08T22:32:03.1486238Z [36;1m  tests/unit/test_portfolio_policy_foundation.py \[0m
2026-08-08T22:32:03.1486918Z [36;1m  tests/unit/test_reconciliation_snapshot_foundation.py \[0m
2026-08-08T22:32:03.1487538Z [36;1m  tests/unit/test_transfer_pairing_v2.py[0m
2026-08-08T22:32:03.1544258Z shell: /usr/bin/bash -e {0}
2026-08-08T22:32:03.1544647Z env:
2026-08-08T22:32:03.1544967Z   PYTHONPATH: src
2026-08-08T22:32:03.1545376Z   JARVIS_FINANCE_ENV: test
2026-08-08T22:32:03.1545968Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T22:32:03.1546800Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T22:32:03.1547560Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T22:32:03.1548395Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T22:32:03.1548951Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:03.1549657Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T22:32:03.1550343Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:03.1551244Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:03.1551870Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T22:32:03.1552526Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T22:32:03.1553051Z ##[endgroup]
2026-08-08T22:32:30.5717694Z ........................................................................ [ 80%]
2026-08-08T22:32:36.8019599Z .................                                                        [100%]
2026-08-08T22:32:36.8020491Z =============================== warnings summary ===============================
2026-08-08T22:32:36.8021485Z ../../../../../opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/fastapi/testclient.py:1
2026-08-08T22:32:36.8023305Z   /opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
2026-08-08T22:32:36.8024966Z     from starlette.testclient import TestClient as TestClient  # noqa
2026-08-08T22:32:36.8025506Z 
2026-08-08T22:32:36.8025922Z -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
2026-08-08T22:32:36.8026613Z 89 passed, 1 warning in 32.94s
2026-08-08T22:32:37.0369072Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:32:37.0370319Z Post job cleanup.
2026-08-08T22:32:37.1675456Z (node:2296) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-08-08T22:32:37.1677044Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-08-08T22:32:37.2053809Z [command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/work/FinanceManager/FinanceManager --files-from manifest.txt --use-compress-program zstdmt
2026-08-08T22:32:37.7970798Z (node:2296) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.
2026-08-08T22:32:38.7399568Z Sent 157291027 of 157291027 (100.0%), 156.7 MBs/sec
2026-08-08T22:32:38.8262312Z Cache saved with the key: setup-python-Linux-x64-24.04-Ubuntu-python-3.11.15-pip-1142f0e2496362389faab45cc2b2d5dacbb96b059f6c5143fd25b1b0407d64f2
2026-08-08T22:32:38.8431560Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T22:32:38.8432753Z Post job cleanup.
2026-08-08T22:32:38.9408642Z [command]/usr/bin/git version
2026-08-08T22:32:38.9485084Z git version 2.54.0
2026-08-08T22:32:38.9537693Z Temporarily overriding HOME='/home/runner/work/_temp/fef0d778-4787-4ede-89b7-1390bfaf77a2' before making global git config changes
2026-08-08T22:32:38.9539498Z Adding repository directory to the temporary git global config as a safe directory
2026-08-08T22:32:38.9540751Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/FinanceManager/FinanceManager
2026-08-08T22:32:38.9648969Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-08-08T22:32:38.9714592Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-08-08T22:32:39.0047032Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-08-08T22:32:39.0093729Z http.https://github.com/.extraheader
2026-08-08T22:32:39.0119077Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2026-08-08T22:32:39.0177720Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-08-08T22:32:39.0598982Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-08-08T22:32:39.0672563Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-08-08T22:32:39.1396834Z Cleaning up orphan processes
2026-08-08T22:32:39.1667569Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-python@v5. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
